package db

import (
	"errors"
)

// Exam 结构体对应数据库中的 exam 表
type Exam struct {
	Id       int64  `json:"id" xorm:"pk autoincr"`
	Question string `json:"question"`
	Answer   string `json:"answer"`
	Memos    string `json:"memos"`
	Course   string `json:"course"`
}

// Save 插入或更新 Exam 记录
func Save(exam *Exam) error {
	engine := GetDB()
	if exam.Id == 0 {
		// 插入新记录
		_, err := engine.Insert(exam)
		return err
	} else {
		// 更新记录
		_, err := engine.ID(exam.Id).Update(exam)
		return err
	}
}

// Find 查询所有 Exam 记录
func Find() ([]Exam, error) {
	engine := GetDB()
	var exams []Exam
	err := engine.Find(&exams)
	return exams, err
}

// Delete 根据 ID 删除 Exam 记录
func Delete(id int64) error {
	engine := GetDB()
	affected, err := engine.ID(id).Delete(&Exam{})
	if affected == 0 {
		return errors.New("record not found")
	}
	return err
}

// Rand 随机获取指定数量的题目
func Rand(count int) ([]Exam, error) {
	engine := GetDB()
	var exams []Exam
	// 使用 SQL 的 ORDER BY RANDOM() 实现随机排序
	err := engine.OrderBy("RANDOM()").Limit(count).Find(&exams)
	return exams, err
}
